Micron Document
🎖️GitЯра🎖️

Node / meshtastic / Meshtastic-Android / files / core / model / src / commonMain / kotlin / org / meshtastic / core / model / util / TelemetryChannels.kt

Displaying Raw • Download

core/model/src/commonMain/kotlin/org/meshtastic/core/model/util/TelemetryChannels.kt cea2c3a015c2c3227f13a3ac9bc4e13c35bbd4ee (cea2c3a0) Text, 4.21 KB

T8b949e/*
* Copyright (c) 2026 Meshtastic LLC
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
Tf0883e@fileTb4b4b4:Te6edf3SuppressTb4b4b4(Ta5d6ff"Ta5d6ffMagicNumberTa5d6ff"Tb4b4b4)

Tff7b72package T7ee787org.meshtastic.core.model.util

Tff7b72import T7ee787org.meshtastic.proto.EnvironmentMetrics

T8b949e/**
* Channel count for the per-channel `EnvironmentMetrics` telemetry fields — `one_wire_temperature_ch0..ch7` and
* `adc_voltage_ch0..ch7`.
*/
Tff7b72const Tff7b72val Te6edf3TELEMETRY_CHANNEL_COUNTTb4b4b4: Tffa657Int Tff7b72= T79c0ff8

T8b949e/**
* Index-to-field accessors for the per-channel telemetry fields.
*
* Wire generates one named property per channel, so indexed access needs an explicit map rather than a list lookup.
* Each field is `optional`, making `null` the only "channel absent" signal — a returned `0f` is a real reading (0 V on
* an unloaded ADC input, 0°C on a probe at freezing), so callers must not treat zero as missing.
*
* Reading past [TELEMETRY_CHANNEL_COUNT] returns `null` rather than throwing, so a firmware that grows the channel
* range degrades to "not shown" instead of crashing.
*/
Tff7b72fun Te6edf3EnvironmentMetricsTb4b4b4.Td2a8ffoneWireTemperatureTb4b4b4(Te6edf3channelTb4b4b4: Tffa657IntTb4b4b4)Tb4b4b4: Tffa657Float? Tff7b72= Tff7b72when Tb4b4b4(Te6edf3channelTb4b4b4) Tb4b4b4{
T79c0ff0 Tff7b72-Tff7b72> Te6edf3one_wire_temperature_ch0
T79c0ff1 Tff7b72-Tff7b72> Te6edf3one_wire_temperature_ch1
T79c0ff2 Tff7b72-Tff7b72> Te6edf3one_wire_temperature_ch2
T79c0ff3 Tff7b72-Tff7b72> Te6edf3one_wire_temperature_ch3
T79c0ff4 Tff7b72-Tff7b72> Te6edf3one_wire_temperature_ch4
T79c0ff5 Tff7b72-Tff7b72> Te6edf3one_wire_temperature_ch5
T79c0ff6 Tff7b72-Tff7b72> Te6edf3one_wire_temperature_ch6
T79c0ff7 Tff7b72-Tff7b72> Te6edf3one_wire_temperature_ch7
Tff7b72else Tff7b72-Tff7b72> Tff7b72null
Tb4b4b4}

Tff7b72fun Te6edf3EnvironmentMetricsTb4b4b4.Td2a8ffadcVoltageTb4b4b4(Te6edf3channelTb4b4b4: Tffa657IntTb4b4b4)Tb4b4b4: Tffa657Float? Tff7b72= Tff7b72when Tb4b4b4(Te6edf3channelTb4b4b4) Tb4b4b4{
T79c0ff0 Tff7b72-Tff7b72> Te6edf3adc_voltage_ch0
T79c0ff1 Tff7b72-Tff7b72> Te6edf3adc_voltage_ch1
T79c0ff2 Tff7b72-Tff7b72> Te6edf3adc_voltage_ch2
T79c0ff3 Tff7b72-Tff7b72> Te6edf3adc_voltage_ch3
T79c0ff4 Tff7b72-Tff7b72> Te6edf3adc_voltage_ch4
T79c0ff5 Tff7b72-Tff7b72> Te6edf3adc_voltage_ch5
T79c0ff6 Tff7b72-Tff7b72> Te6edf3adc_voltage_ch6
T79c0ff7 Tff7b72-Tff7b72> Te6edf3adc_voltage_ch7
Tff7b72else Tff7b72-Tff7b72> Tff7b72null
Tb4b4b4}

T8b949e/** Returns a copy with 1-Wire [channel] set to [value]; an out-of-range [channel] is a no-op. */
Tff7b72fun Te6edf3EnvironmentMetricsTb4b4b4.Td2a8ffwithOneWireTemperatureTb4b4b4(Te6edf3channelTb4b4b4: Tffa657IntTb4b4b4, Te6edf3valueTb4b4b4: Tffa657Float?Tb4b4b4)Tb4b4b4: Te6edf3EnvironmentMetrics Tff7b72= Tff7b72when Tb4b4b4(Te6edf3channelTb4b4b4) Tb4b4b4{
T79c0ff0 Tff7b72-Tff7b72> Te6edf3copyTb4b4b4(Te6edf3one_wire_temperature_ch0 Tff7b72= Te6edf3valueTb4b4b4)
T79c0ff1 Tff7b72-Tff7b72> Te6edf3copyTb4b4b4(Te6edf3one_wire_temperature_ch1 Tff7b72= Te6edf3valueTb4b4b4)
T79c0ff2 Tff7b72-Tff7b72> Te6edf3copyTb4b4b4(Te6edf3one_wire_temperature_ch2 Tff7b72= Te6edf3valueTb4b4b4)
T79c0ff3 Tff7b72-Tff7b72> Te6edf3copyTb4b4b4(Te6edf3one_wire_temperature_ch3 Tff7b72= Te6edf3valueTb4b4b4)
T79c0ff4 Tff7b72-Tff7b72> Te6edf3copyTb4b4b4(Te6edf3one_wire_temperature_ch4 Tff7b72= Te6edf3valueTb4b4b4)
T79c0ff5 Tff7b72-Tff7b72> Te6edf3copyTb4b4b4(Te6edf3one_wire_temperature_ch5 Tff7b72= Te6edf3valueTb4b4b4)
T79c0ff6 Tff7b72-Tff7b72> Te6edf3copyTb4b4b4(Te6edf3one_wire_temperature_ch6 Tff7b72= Te6edf3valueTb4b4b4)
T79c0ff7 Tff7b72-Tff7b72> Te6edf3copyTb4b4b4(Te6edf3one_wire_temperature_ch7 Tff7b72= Te6edf3valueTb4b4b4)
Tff7b72else Tff7b72-Tff7b72> Tff7b72this
Tb4b4b4}

T8b949e/** Returns a copy with ADC [channel] set to [value]; an out-of-range [channel] is a no-op. */
Tff7b72fun Te6edf3EnvironmentMetricsTb4b4b4.Td2a8ffwithAdcVoltageTb4b4b4(Te6edf3channelTb4b4b4: Tffa657IntTb4b4b4, Te6edf3valueTb4b4b4: Tffa657Float?Tb4b4b4)Tb4b4b4: Te6edf3EnvironmentMetrics Tff7b72= Tff7b72when Tb4b4b4(Te6edf3channelTb4b4b4) Tb4b4b4{
T79c0ff0 Tff7b72-Tff7b72> Te6edf3copyTb4b4b4(Te6edf3adc_voltage_ch0 Tff7b72= Te6edf3valueTb4b4b4)
T79c0ff1 Tff7b72-Tff7b72> Te6edf3copyTb4b4b4(Te6edf3adc_voltage_ch1 Tff7b72= Te6edf3valueTb4b4b4)
T79c0ff2 Tff7b72-Tff7b72> Te6edf3copyTb4b4b4(Te6edf3adc_voltage_ch2 Tff7b72= Te6edf3valueTb4b4b4)
T79c0ff3 Tff7b72-Tff7b72> Te6edf3copyTb4b4b4(Te6edf3adc_voltage_ch3 Tff7b72= Te6edf3valueTb4b4b4)
T79c0ff4 Tff7b72-Tff7b72> Te6edf3copyTb4b4b4(Te6edf3adc_voltage_ch4 Tff7b72= Te6edf3valueTb4b4b4)
T79c0ff5 Tff7b72-Tff7b72> Te6edf3copyTb4b4b4(Te6edf3adc_voltage_ch5 Tff7b72= Te6edf3valueTb4b4b4)
T79c0ff6 Tff7b72-Tff7b72> Te6edf3copyTb4b4b4(Te6edf3adc_voltage_ch6 Tff7b72= Te6edf3valueTb4b4b4)
T79c0ff7 Tff7b72-Tff7b72> Te6edf3copyTb4b4b4(Te6edf3adc_voltage_ch7 Tff7b72= Te6edf3valueTb4b4b4)
Tff7b72else Tff7b72-Tff7b72> Tff7b72this
Tb4b4b4}

T8b949e/**
* Lifts the deprecated `repeated one_wire_temperature` list onto the per-channel fields, for telemetry stored before
* firmware 2.8 moved to `one_wire_temperature_chN`.
*
* Upstream flipped field 23 to `FT_IGNORE`, so current firmware never emits it and this is a read path for historical
* logs only. Channels already carrying a per-channel value win, so a live packet is never overwritten by legacy data.
*/
Tf0883e@SuppressTb4b4b4(Ta5d6ff"Ta5d6ffDEPRECATIONTa5d6ff"Tb4b4b4)
Tff7b72fun Te6edf3EnvironmentMetricsTb4b4b4.Td2a8ffwithLegacyOneWireTemperaturesTb4b4b4(Tb4b4b4)Tb4b4b4: Te6edf3EnvironmentMetrics Tff7b72=
Te6edf3one_wire_temperatureTb4b4b4.Te6edf3takeTb4b4b4(Te6edf3TELEMETRY_CHANNEL_COUNTTb4b4b4)Tb4b4b4.Te6edf3foldIndexedTb4b4b4(Tff7b72thisTb4b4b4) Tb4b4b4{ Te6edf3channelTb4b4b4, Te6edf3metricsTb4b4b4, Te6edf3legacy Tff7b72-Tff7b72>
Tff7b72if Tb4b4b4(Te6edf3metricsTb4b4b4.Te6edf3oneWireTemperatureTb4b4b4(Te6edf3channelTb4b4b4) Tff7b72=Tff7b72= Tff7b72nullTb4b4b4) Tb4b4b4{
Te6edf3metricsTb4b4b4.Te6edf3withOneWireTemperatureTb4b4b4(Te6edf3channelTb4b4b4, Te6edf3legacyTb4b4b4)
Tb4b4b4} Tff7b72else Tb4b4b4{
Te6edf3metrics
Tb4b4b4}
Tb4b4b4}

Served by rngit 1.5.0 - Generated in 0.1s